package com.study.mxj.ref;

import com.study.common.ref.entity.Student;
import com.study.common.ref.util.CheckUtil;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author mengxj
 */
public class RefTest {

    public static void main(String[] args) throws Exception {
        //待比较的值
        Double score = 80.0;
        //创建学生对象
        Student student = new Student("张三", 97.0);
        Object res = check(student, score);
        System.out.println(student + " ---> " + res);
    }

    static Object check(Student stu, Double score) throws Exception{
        //方法名称
        String methodName = "notLtScore";
        //获取CheckUtil的class
        Class<CheckUtil> cls = CheckUtil.class;
        //根据CheckUtil的class获取CheckUtil的构造器
        Constructor<CheckUtil> constructor = cls.getDeclaredConstructor();
        //由于CheckUtil的构造器是private（私有的），这里设置解除权限，即忽略权限
        constructor.setAccessible(true);
        //根据CheckUtil的构造器创建CheckUtil对象
        CheckUtil util = constructor.newInstance();
        //根据CheckUtil的class获取名为notLtScore，参数为stu类型和Double类型的方法
        Method method = cls.getDeclaredMethod(methodName, stu.getClass(), Double.class);
        //由于CheckUtil的notLtScore是private（私有的），这里设置解除权限，即忽略权限
        method.setAccessible(true);
        //调用CheckUtil的notLtScore方法，并传入参数
        return method.invoke(util, stu, score);
    }
}
